package galaxy.drawer.drawable;
import processing.core.PGraphics; 

import java.util.Random;

public class Taivas implements Drawable {

	Random arpoja = new Random();
	private int kaukaisiaTahtia = 100;
	private int tahtia = 100;
	private int hienojaTahtia = 5;
	private int planeettoja = 4;

	public void draw(PGraphics g) {
		arvoTaivas(g);
	}
	
	public void arvoTaivas(PGraphics g) {
		g.smooth();
		
		for(int i=1; i < kaukaisiaTahtia; i++) {
			int a = arpoja.nextInt(g.width);
			int b = arpoja.nextInt(g.height);
			this.piirraKaukainenTahti(a, b, g);
		}
		for(int j=1; j < tahtia; j++) {
			int c = arpoja.nextInt(g.width);
			int d = arpoja.nextInt(g.height);
			int sade = arpoja.nextInt(6) + 10; 
			int c1 = arpoja.nextInt(255);
			int c2 = arpoja.nextInt(255);
			int c3  = arpoja.nextInt(255);
			this.piirraTahti(c, d, sade, c1, c2, c3 , g);
		}
		g.colorMode(g.HSB, 100);
		for(int k=1; k < hienojaTahtia; k++) {
			float kulma = arvoKulma();
			pyorita(g, kulma);
			int e = arpoja.nextInt(g.width);
			int f = arpoja.nextInt(g.height);
			int c4 = arpoja.nextInt(100);
			int c5 = arpoja.nextInt(20)+80;
			int c6 = arpoja.nextInt(20);
			int kokoHT = arpoja.nextInt(15);
			this.piirraHienoTahti(e, f, c4, c5, c6, kokoHT, g);
			pyorita(g, -kulma);
		}
		for(int k=1; k < planeettoja; k++) {
			float kulma = arvoKulma();
			pyorita(g, kulma);
			int h = arpoja.nextInt(g.width);
			int l = arpoja.nextInt(g.height);
			int c7 = arpoja.nextInt(50)+50;
			int c8 = arpoja.nextInt(30)+70;
			int c9 = arpoja.nextInt(10);
			int kokoJ = arpoja.nextInt(35);
			this.piirraJotain(h, l, c7, c8, c9, kokoJ, g);   
			pyorita(g, -kulma);
		}
		g.colorMode(g.HSB, 255);
	}

	private void pyorita(PGraphics g, float kulma) {
		g.rotate(kulma);		
	}
	
	private float arvoKulma(){
		float kulma = 0;
		kulma = (float) (arpoja.nextDouble()*2*Math.PI);
		return kulma;
	}

	public void piirraKaukainenTahti(int x, int y, PGraphics g) {
		g.stroke(255);
		g.point(x, y);
	}

	public void piirraTahti(int x, int y, int sade, int c1, int c2, int c3, PGraphics g) {  
		for(int i=0; i < sade; i++) {
			g.stroke(c1, c2, c3);
			g.noFill();
			g.ellipse(x, y, i, i);
			c1 = c1-2*sade;
			c2 = c2-2*sade;
			c3 = c3-2*sade;
		}    
	}

	public void piirraHienoTahti(int x, int y, int c1, int c2, int c3, int koko, PGraphics g){
		float alkuKoko = koko;

		for(int i = 0; i < 50; i++){
			int color1 = g.color(c1, c2, i*2);
			g.fill(color1);
			g.stroke(color1);
			g.ellipse(x, y, alkuKoko, alkuKoko);
			alkuKoko-=koko/66.7;
		}

		float alkuLeveys2 = koko/50;
		float alkuKorkeus2 = koko+koko/2;

		for(int j = 1; j < 50; j++){
			int color2 = g.color(c1, c2, j*2);
			g.fill(color2);
			g.stroke(color2);
			g.ellipse(x, y, alkuLeveys2, alkuKorkeus2);
			alkuKorkeus2-=koko/40.0;	
		}

		float alkuLeveys3 = koko+koko/2;
		float alkuKorkeus3 = koko/50;

		for(int k = 1; k < 50; k++){
			int color3 = g.color(c1, c2, k*2);
			g.fill(color3);
			g.stroke(color3);
			g.ellipse(x, y, alkuLeveys3, alkuKorkeus3);
			alkuLeveys3-=koko/40.0;
		}
	}

	public void piirraJotain(int x, int y, int c1, int c2, int c3, int koko, PGraphics g){
		float alkuKoko = koko;
		for (int i = 0; i < 90; i++){
			int color1 = g.color(c1,c2,c3+i); 
			g.fill(color1);
			g.stroke(color1);
			g.ellipse(x, y, alkuKoko, alkuKoko);
			alkuKoko-=koko/100.0;
		}

		float alkuLeveys2 = koko;
		float alkuKorkeus2 = koko/50;
		g.noStroke();
		for(int j = 0; j < 90; j++){
			int color2 = g.color(c1+5, 100-j,40+j);
			g.fill(color2);
			g.stroke(color2);
			g.ellipse(x, y, alkuLeveys2, alkuKorkeus2);
			alkuLeveys2-=koko/100.0;
			alkuKorkeus2+=koko/2500.0;
		}
	}

}
